#include<stdio.h>
#include<stdbool.h>
#include<string.h> 
#define N 5
// 定义一个栈，用来存储排列
int stack[N];
// 栈的顶部指针
int top =-1;
// 定义一个布尔数组 used，用来记录当前数字是否被使用过
bool used[N];
// DFS 搜索函数
void dfs(){
// 如果栈的大小已经等于 N，说明找到了一个排列
if(top==N-1){
 //打印当前排列
  for(int i=0;i<N;i++){
    printf("%d ",stack[i]);
}
printf("\n");
return;
}
// 从 1 到 N 遍历所有数字
for(int i=1;i <= N; i++){
        // 如果当前数字没有被使用过，则将它压入栈中
        if (!used[i - 1]){
            used[i - 1] = true;
            stack[++top] = i;
            // 递归搜索
            dfs();
            //回溯,将数字弹出栈
            top--;
            used[i-1] = false;
        }
    }
}
int main(){
//初始化 used 数组，全部设为 false
 for(int i=0;i<N;i++){
    used[i]=false;
}
  // 开始搜索
  dfs();
  return 0;
}
